/**
* This file is part of Owlet.
*
* Owlet is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Owlet is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Owlet. If not, see <http://www.gnu.org/licenses/>.
*/
package com.sibext.owlet.activity;
import java.util.ArrayList;
import java.util.List;
import com.sibext.owlet.OwletApplication;
import com.sibext.owlet.R;
import com.sibext.owlet.activity.adapter.LanguageAdapter;
import com.sibext.owlet.activity.adapter.LanguageAdapter.LanguageItem;
import com.sibext.owlet.helper.Log;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.Spinner;
import android.widget.TableLayout;
import android.widget.TableRow;
public class SettingsActivity extends BaseOwletActivity implements OnSharedPreferenceChangeListener {
private static final String TAG = "SettingsActivity";
private TableLayout tableView;
private Button backButton;
private SharedPreferences sharedPreferences;
private int id;
private View soundLine;
@Override
protected void onCreate(Bundle savedInstanceState) {
setLanguageFromPref();
super.onCreate(savedInstanceState);
id = getIntent().getIntExtra(MainActivity.ID, 0);
setContentView(R.layout.settings);
backButton = (Button) findViewById(R.id.settings_back_button);
tableView = (TableLayout) findViewById(R.id.settings_content);
sharedPreferences = getSharedPreferences(OwletApplication.SETTINGS_NAME, MODE_PRIVATE);
sharedPreferences.registerOnSharedPreferenceChangeListener(this);
backButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
soundLine = getSoundLineView();
tableView.addView(getSoundOffView());
tableView.addView(soundLine);
tableView.addView(getLanguageView());
}
@Override
public void onBackPressed() {
Intent intent = new Intent(getApplicationContext(), ScreenOfTaskActivity.class);
intent.putExtra(MainActivity.ID, id);
startActivity(intent);
finish();
super.onBackPressed();
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(OwletApplication.LANGUAGE_NAME)) {
Intent intent = new Intent(getApplicationContext(), SettingsActivity.class);
intent.putExtra(MainActivity.ID, id);
startActivity(intent);
finish();
} else {
return;
}
}
@Override
protected int getMenuId() {
return R.menu.settings;
}
@Override
protected void onMainMenuSelected(int id) {
switch (id) {
case R.id.menu_exit:
onExit();
break;
case R.id.menu_logout:
onExit();
onAuthorizationActivity();
break;
case R.id.menu_about:
onAboutActivity();
break;
case R.id.menu_back:
onBackPressed();
break;
case R.id.menu_statistic:
onStatisticsActivity();
break;
}
}
private View getSoundOffView() {
final String valueKey = getString(R.string.volume_key);
TableRow sound = (TableRow)View.inflate(this, R.layout.settings_sound_off_item, null);
CheckBox checkBox = (CheckBox)sound.findViewById(R.id.settings_sound_off_item_checkbox);
checkBox.setChecked(sharedPreferences.getBoolean(valueKey, true));
checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
sharedPreferences.edit().putBoolean(valueKey, isChecked).commit();
soundLine.findViewById(R.id.settings_sound_line).setEnabled(isChecked);
}
});
return sound;
}
private View getSoundLineView() {
TableRow languageLine = (TableRow)View.inflate(this, R.layout.settings_sound_line_item, null);
SeekBar level = (SeekBar)languageLine.findViewById(R.id.settings_sound_line);
//
boolean soundLineEnableFlag = sharedPreferences.getBoolean(getString(R.string.volume_key), true);
//
level.setEnabled(soundLineEnableFlag);
float currentLevel = level.getMax()*sharedPreferences.getFloat(getString(R.string.volume_level_key), 1);
level.setProgress((int)currentLevel);
level.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
float level = (float)progress/seekBar.getMax();
sharedPreferences.edit().putFloat(getString(R.string.volume_level_key), level).commit();
}
});
return languageLine;
}
private View getLanguageView() {
final String valueKey = getString(R.string.language_key);
TableRow language = (TableRow)View.inflate(this, R.layout.settings_language_item, null);
Spinner spinner = (Spinner)language.findViewById(R.id.settings_language_item_spinner);
final String[] langs = getResources().getStringArray(R.array.values_lang);
final String[] entries = getResources().getStringArray(R.array.entries_lang);
List<LanguageItem> items = new ArrayList<LanguageItem>();
int index = 0;
for(String lang : langs) {
items.add(new LanguageItem(lang, entries[index]));
index += 1;
}
spinner.setAdapter(new LanguageAdapter(this, items));
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Log.d(TAG, "Selected " + entries[position]);
sharedPreferences.edit().putString(valueKey, langs[position]).commit();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
});
String currentCode = sharedPreferences.getString(getString(R.string.language_key), getString(R.string.pref_lang_default));
int position = 0;
for (int pos = 0; pos < langs.length; ++pos) {
if (langs[pos].equals(currentCode)) {
position = pos;
break;
}
}
spinner.setSelection(position);
return language;
}
}